Выводим пользовательские классы в отладочный контекст CDumpContext:
virtual void Dump( CDumpContext& dc ) const
Создавая свой класс-потомок от CObject Вы должны перегрузить функцию Dump для вывода Ваших данных описанных в классе. В ходе вывода в отладочный поток выводится и имя класса при условии, что к классу добавлена информация о нем с помощью
IMPLEMENT_DYNAMIC IMPLEMENT_SERIAL
Это отладочная функция и использоваться она должна только в версии Debug следите за этим с помощью #ifdef _DEBUG #endif директивами компиляции. Кроме того эта функция const, поэтому данные менять нельзя. Кроме того вы должны использовать F5 для запуска в режиме отладки. Давайте посмотрим пример:
#include "stdafx.h"
#include "afxwin.h"
#include "iostream.h"
class CMyObject : public CObject
{
public:
#ifdef _DEBUG
void AssertValid() const;
void Dump(CDumpContext& dc) const;
#endif
protected:
DECLARE_DYNCREATE(CMyObject)
private:
int x;
int y;
};
IMPLEMENT_DYNCREATE(CMyObject,CObject);
#ifdef _DEBUG
void CMyObject::AssertValid() const
{
CObject::AssertValid();
ASSERT(y==100);
}
void CMyObject::Dump( CDumpContext& dc ) const
{
CObject::Dump(dc);
dc << "Hello Dump ";
}
#endif
class CAlternativeObject : public CObject
{
protected:
DECLARE_SERIAL(CAlternativeObject);
};
IMPLEMENT_SERIAL(CAlternativeObject,CObject,1);
void main()
{
CMyObject cm;
#ifdef _DEBUG
cm.Dump(afxDump) ;
#endif
}
Я использовал стандартный контекст afxDump, поэтому весь вывод пойдет в окно отладки. Вот так:
